package com.alibaba.csp.sentinel.dashboard.util;


import com.alibaba.csp.sentinel.util.StringUtil;

public class StringUtils {
    /**
     * 首字母小写
     * @param str
     * @return
     */
    public static String lowerFirst(String str) {
        char[] chars = str.toCharArray();
        if (chars[0] >= 'A' && chars[0] <= 'Z') {
            chars[0] = (char)(chars[0] + 32);
        }
        return String.valueOf(chars);
    }
    /**
     * 首字母大写
     * @param str
     * @return
     */
    public static String upperFirst(String str) {
        char[] chars = str.toCharArray();
        if (chars[0] >= 'a' && chars[0] <= 'z') {
            chars[0] = (char)(chars[0] - 32);
        }
        return String.valueOf(chars);
    }
    /**
     * 把数据库表字段中下划线的命名方式的字段，转换成java驼峰式的命名（即把"_"后面的第一个字母大写，并排除第一个"_"）
     * @return
     */
    public static String formatDbToJavaField(String original) {
        if(!StringUtil.isEmpty(original)) {
            if(original.contains("_")) {//包含"_"
                StringBuffer buffer = new StringBuffer();
                String[] strArr = original.split("_");
                for(int i=0;i<strArr.length;i++) {
                    if(i != 0) {//第一个不处理
                        if(original.startsWith("_") && i==1) {
                            buffer.append(lowerFirst(strArr[i]));
                        }else {
                            buffer.append(upperFirst(strArr[i]));
                        }
                    }else {
                        if(!original.startsWith("_")) {//否则strArr[0]为空
                            buffer.append(lowerFirst(strArr[i]));
                        }
                    }
                }
                return buffer.toString();
            }else {
                return lowerFirst(original);
            }
        }
        return null;
    }
    /**
     * 把java驼峰式的命名（即把"_"后面的第一个字母大写，并排除第一个"_"）转换成数据库表字段中下划线的命名方式的字段
     * @return
     */
    public static String formatJavaFieldToDb(String original) {
        if(!StringUtil.isBlank(original)){
            return StringUtils.format(original,"_");
        }
        return null;
    }
    /**
     * 将字符串中的大写字母转换成小写，然后在该字符串前添加分隔符
     * @return
     */
    public static String format(String oldStr, String separator) {

        StringBuffer sb = new StringBuffer();
        char[] c = oldStr.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] >= 97 && c[i]<=122) {
                //如果是小写字母
                sb.append((c[i] + ""));
            }else if(c[i]>=65 && c[i]<=90) {
                //如果是大写字母，将大写转换成小写然后在前面加上前缀
                sb.append(separator + (c[i] + "").toLowerCase());
            }else{
                sb.append((c[i] + ""));
            }
        }

        return sb.toString();
    }

}
